package cn.com.platform.dao;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;

import cn.com.platform.entity.MemberEntity;

/**
 * 成员dao
 * 
 * @author nibili 2016年6月16日
 * 
 */
public interface MemberDao extends JpaRepository<MemberEntity, Long>, JpaSpecificationExecutor<MemberEntity> {

	/**
	 * 按用户名查找实体
	 * 
	 * @param uname
	 * @return
	 * @author nibili 2016年6月17日
	 */
	public MemberEntity findByUname(String uname);

	/**
	 * 根据手机号查找用户实体
	 * 
	 * @param mobile
	 * @return
	 * @author nibili 2016年6月17日
	 */
	public List<MemberEntity> findByMobile(String mobile);

	@Query("select c from MemberEntity c where ((c.mobile is not null and c.mobile<>'' and c.mobile=?1) or (c.uname is not null and c.uname<>'' and c.uname=?1) or (c.mail is not null and c.mail<>'' and c.mail=?1)) and c.deleteStatus = false")
	public MemberEntity findByMobileOrUnameOrMail(String uname);

	/**
	 * 计算 手机号，用户名，邮箱地址 是否有被占用
	 * 
	 * @param mobile
	 * @param uname
	 * @param mail
	 * @return
	 * @author nibili 2016年6月16日
	 */
	@Query("select count(1) from MemberEntity c where ((c.mobile is not null and c.mobile<>'' and c.mobile=?1) or (c.uname is not null and c.uname<>'' and c.uname=?2) or (c.mail is not null and c.mail<>'' and c.mail=?3)) and c.deleteStatus = false")
	public int countByMobileOrUnameOrMail(String mobile, String uname, String mail);

	/**
	 * 计算 手机号 是否有被占用
	 * 
	 * @param mobile
	 * @return
	 * @author nibili 2016年6月16日
	 */
	@Query("select count(1) from MemberEntity c where (c.mobile is not null and c.mobile<>'' and c.mobile=?1) and c.deleteStatus = false")
	public int countByMobile(String mobile);

	/**
	 * 计算 用户名 是否有被占用
	 * 
	 * @param uname
	 * @return
	 * @author nibili 2016年6月16日
	 */
	@Query("select count(1) from MemberEntity c where (c.uname is not null and c.uname<>'' and c.uname=?1) and c.deleteStatus = false")
	public int countByUname(String uname);

	/**
	 * 计算 邮箱地址 是否有被占用
	 * 
	 * @param mail
	 * @return
	 * @author nibili 2016年6月16日
	 */
	@Query("select count(1) from MemberEntity c where  (c.mail is not null and c.mail<>'' and c.mail=?1) and c.deleteStatus = false")
	public int countByMail(String mail);

	/**
	 * 按邮箱查找实体
	 * 
	 * @param mail
	 * @return
	 * @author nibili 2016年6月20日
	 */
	@Query("select c from MemberEntity c where  (c.mail is not null and c.mail<>'' and c.mail=?1)")
	public MemberEntity findByMail(String mail);

	/**
	 * 根据用户id和用户账号查找用户信息
	 *@param id
	 *@param uname
	 *@return
	 * @author lmh 2016年10月27日
	 */
	public MemberEntity findByIdAndUname(long id, String uname);

}
